package main
import (
	"fmt"
	"os"
	"bufio"
	"io"
	"io/ioutil"
)

func main(){
	//1、带 缓冲区的方式 读取文件！适合文件较大的情况
	file,err := os.Open("D:/uploadfiles/test.txt") //file指针/file对象/file文件句柄
	if err != nil{
		fmt.Println("open file error!",err)
	}
	fmt.Println("file : ",file)

	//在函数结束前及时关闭文件流，否则会内存泄漏
	defer file.Close()

	//创建一个 *Reader ，是带缓冲的 默认缓冲区 4096 个字节
	reader := bufio.NewReader(file)
	//循环读取文件
	for {
		str,err :=reader.ReadString('\n') //读到换行就结束
		if err == io.EOF{  //io.EOF表示文件的末尾
			break
		}
		fmt.Println(str)
	} 
	fmt.Println("文件读取结束~")

	//2、使用ioutil一次将整个文件读入到内存中，【！这种适合文件不大的情况！】 ：ioutil.ReadFile
	//使用ioutil.Read File一次性将文件读取到位 //不需要Open文件和Close文件，因为全部封装在 ReadFile 内了
	myfile := "D:/uploadfiles/test.txt"
	content , err2 := ioutil.ReadFile(myfile) //返回的是[]byte切片
	if err2 != nil{
		fmt.Println("open file error!:",err2)
	}
	fmt.Printf("file content : %v\n",content) //[]byte
	fmt.Printf("file content : %s\n",content) //[]byte 转成 string
	fmt.Printf("file content : %v\n",string(content)) //[]byte 转成 string
}	